﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
namespace QuanLyKhachSan.DanhMuc
{
    public partial class frmLoaiPhong : DevExpress.XtraEditors.XtraForm
    {
        public frmLoaiPhong()
        {
            InitializeComponent();
        }
        DataClassesKhachSanDataContext dc = new DataClassesKhachSanDataContext(SystemInfo.pub_ConnString);
        Boolean saved = true;
        DialogResult result;
        private void barButtonItem1_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            try
            {
                gvLoaiPhong.MoveLast();
                gvLoaiPhong.MoveFirst();
                dc.SubmitChanges();
                //XtraMessageBox.Show("Đã lưu!","Lưu",MessageBoxButtons.OK,MessageBoxIcon.Information);
                saved = true;

                if (this.Text.Substring(this.Text.Length - 1, 1) == "*")
                {
                    this.Text = this.Text.Substring(0, this.Text.Length - 1);
                }
            }
            catch (Exception ex)
            {
                if (ex.Message.Contains("Cannot insert duplicate key in object"))
                {
                    saved = true;
                    XtraMessageBox.Show("Có lỗi trong quá trình lưu dữ liệu.", "Lỗi", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    this.Close();
                }
                else
                {
                    throw;
                }

            }
        }

        private void barButtonItem2_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (gvLoaiPhong.RowCount == 0)
            {
                XtraMessageBox.Show("Không có dữ liệu để xóa.", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
            {
                result = XtraMessageBox.Show("Bạn có chắc muốn xóa?", "Xác nhận", MessageBoxButtons.YesNo, MessageBoxIcon.Asterisk);
                if (result == DialogResult.Yes)
                {
                    int rowHandles = gvLoaiPhong.FocusedRowHandle;
                    try
                    {
                        LOAI_PHONG lp = (LOAI_PHONG)gvLoaiPhong.GetRow(rowHandles);
                        if ((lp.DON_GIA_PHONGs.Count > 0) || (lp.PHONGs.Count > 0))
                        {
                            XtraMessageBox.Show("Không thể xóa!\nDữ liệu đang được sử dụng.", "Lỗi!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        }
                        else
                        {
                            gvLoaiPhong.DeleteRow(rowHandles);
                            saved = false;
                            if (this.Text.Substring(this.Text.Length - 1, 1) != "*")
                            {
                                this.Text = this.Text + "*";
                            }
                        }
                    }
                    catch (Exception)
                    {
                        throw;
                    }
                }
            }
        }
        private void frmLoaiPhong_Load(object sender, EventArgs e)
        {
            var lp = dc.GetTable<LOAI_PHONG>();
            gcLoaiPhong.DataSource = lp;
        }

        private void frmLoaiPhong_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (saved == false)
            {
                result = XtraMessageBox.Show("Dữ liệu chưa được lưu!\nBạn có muốn lưu không?", "Loại phòng", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

                if (result == System.Windows.Forms.DialogResult.Yes)
                {
                    dc.SubmitChanges();
                }
                else if (result == System.Windows.Forms.DialogResult.Cancel)
                {
                    e.Cancel = true;
                }
            }
        }

        private void gvLoaiPhong_InvalidRowException(object sender, DevExpress.XtraGrid.Views.Base.InvalidRowExceptionEventArgs e)
        {
            e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.DisplayError;
        }

        private void gvLoaiPhong_InvalidValueException(object sender, DevExpress.XtraEditors.Controls.InvalidValueExceptionEventArgs e)
        {
            e.ExceptionMode = DevExpress.XtraEditors.Controls.ExceptionMode.DisplayError;
        }

        private void gvLoaiPhong_ValidateRow(object sender, DevExpress.XtraGrid.Views.Base.ValidateRowEventArgs e)
        {
            try
            {
                string cp = (string)gvLoaiPhong.GetRowCellValue(e.RowHandle, colLoPhong);
                if (cp == null)
                {
                    e.Valid = false;
                    gvLoaiPhong.SetColumnError(colLoPhong, "Loại phòng không được để trống.");
                }

            }
            catch (Exception)
            {
                throw;
            }
        }

        private void gvLoaiPhong_ValidatingEditor(object sender, DevExpress.XtraEditors.Controls.BaseContainerValidateEditorEventArgs e)
        {
            string NewValue = (string)e.Value;

            #region //Region Cỡ phòng

            if (gvLoaiPhong.FocusedColumn == colLoPhong)
            {
                if (NewValue != null)
                {
                    if (NewValue.Trim() == "")
                    {
                        e.Valid = false;
                        e.ErrorText = "Loại phòng không được để trống.";
                    }
                    else
                    {
                        NewValue = NewValue.Trim();
                        if (NewValue.Length > 50)
                        {
                            e.Valid = false;
                            e.ErrorText = "Cỡ phòng có độ dài tối đa là 50 ký tự.";
                        }
                        else
                        {
                            for (int i = 0; i < gvLoaiPhong.RowCount; i++)
                            {
                                string OldValue = (string)gvLoaiPhong.GetRowCellValue(i, colLoPhong);
                                int[] rowHandle = gvLoaiPhong.GetSelectedRows();
                                if (OldValue.ToUpper().Trim() == NewValue.ToUpper().Trim() && i != rowHandle[0])
                                {
                                    e.Valid = false;
                                    e.ErrorText = "Loại phòng này đã tồn tại.";
                                    break;
                                }
                            }
                        }
                    }
                }

            }
            #endregion
        }
    }
}